Реклама

Tproger всё о программировании

Написать пост

Войти

Что вы читаете, смотрите и покупаете, чтобы нам быть в теме — поделитесь опытом

Лента

Лента

Новости

Новости

Флудильня

Флудильня

Карта дня

Карта дня

Викторины

Викторины

Компании

Компании

Курсы

Курсы

События

События

Языки

Языки

Python

JavaScript

C++

Java

PHP

CSS

C#

Ещё...

Темы

Темы

Веб-разработка

Алгоритмы

Разработка игр

Искусственный интеллект

Нейронные сети

Мобильная разработка

Паттерны проектирования

Машинное обучение

Data Science

Тестирование

Ещё...

Заказать рекламу

О нас

Мы в Telegram

Другие соц. сети

Правила

Ещё

Рассказать о баге

Информация

Хитрости с битовыми операциями

Иван Бирюков
21 дек 2016 Отредактировано 27 дек 2023

12

77К открытий82К показов

Нашли и оформили подборку различных хитрых приёмов с битовыми операциями. С основами битовых операций также можно ознакомиться в нашей статье. Если вы знаете какие-то трюки, которые не вошли в этот список, делитесь ими в комментариях!

Целые числа

Установка n-ого бита

x | (1<<n)

Обнуление n-ого бита

x & ~(1<<n)

Переключение n-ого бита

x ^ (1<<n)

Округление до следующей степени двойки

unsigned int v; //only works if v is 32 bit
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;

Получение максимального целого

int maxInt = ~(1 << 31);
int maxInt = (1 << 31) - 1;
int maxInt = (1 << -1) - 1;

Получение минимального целого

int minInt = 1 << 31;
int minInt = 1 << -1;

Получение максимального long

long maxLong = ((long)1 << 127) - 1;

Умножение на 2

n << 1;

Деление на 2

n >> 1;

Умножение на m-тую степень 2

n << m;

Деление на m-тую степень 2

n >> m;

Проверка на равенство

На 35% быстрее, чем JS ?

(a^b) == 0; // a == b

Проверка на чётность

(n & 1) == 1;

Обмен значениями

a ^= b;
b ^= a;
a ^= b;

Модуль

//version 1
x < 0 ? -x : x;

//version 2
(x ^ (x >> 31)) - (x >> 31);

Максимум двух чисел

b & ((a-b) >> 31) | a & (~(a-b) >> 31);

Минимум двух чисел

a & ((a-b) >> 31) | b & (~(a-b) >> 31);

Проверка на одинаковый знак

(x ^ y) >= 0;

Смена знака

i = ~i + 1; // or
i = (i ^ -1) + 1; // i = -i

Вычисление 2^n

2 << (n-1);

Проверка на степень 2

n > 0 && (n & (n - 1)) == 0;

Остаток от деления 2^n на m

m & (n - 1);

Среднее арифметическое

(x + y) >> 1;
((x ^ y) >> 1) + (x & y);

Получение m-ого бита n (справа налево)

(n >> (m-1)) & 1;

Установка m-ого бита n (справа налево)

n & ~(1 << (m-1));

Проверка n-ого бита

if (x & (1<<n)) {
n-th bit is set
}
else {
n-th bit is not set
}

Выделение самой правой 1

x & (-x)

Выделение самого правого 0

~x & (x+1)

Смена самого правого 0 на 1

x | (x+1)

n+1

-~n

n-1

~-n

if (x==a) x=b; if (x==b) x=a;

x = a ^ b ^ x;

Строки

Преобразование буквы в строчную

OR by space => (x | ' ')
Result is always lowercase even if letter is already lowercase
eg. ('a' | ' ') => 'a' ; ('A' | ' ') => 'a'

Преобразование буквы в заглавную

AND by underline => (x & '_')
Result is always uppercase even if letter is already uppercase
eg. ('a' & '_') => 'A' ; ('A' & '_') => 'A'

Смена вида буквы

XOR by space => (x ^ ' ')
eg. ('a' ^ ' ') => 'A' ; ('A' ^ ' ') => 'a'

Номер буквы в алфавите

AND by chr(31)/binary('11111')/(hex('1F') => (x & "\x1F")
Result is in 1..26 range, letter case is not important
eg. ('a' & "\x1F") => 1 ; ('B' & "\x1F") => 2

Номер заглавной буквы в алфавите

AND by ? => (x & '?') or XOR by @ => (x ^ '@')
eg. ('C' & '?') => 3 ; ('Z' ^ '@') => 26

Номер строчной буквы в алфавите

XOR by backtick/chr(96)/binary('1100000')/hex('60') => (x ^ '`')
eg. ('d' ^ '`') => 4 ; ('x' ^ '`') => 25

Прочее

Быстрая смена цвета с R5G5B5 на R8G8B8

R8 = (R5 << 3) | (R5 >> 2)
G8 = (R5 << 3) | (R5 >> 2)
B8 = (R5 << 3) | (R5 >> 2)

Примечание: можно использовать только латиницу.

Следите за новыми постами по любимым темам

Поразрядная обработкаПодписаться

Низкоуровневое программированиеПодписаться

Красивый хакПодписаться

12

77К открытий82К показов

Также рекомендуем

Квантовые вычисления для разработчиков: когда нам придется учить новую математику?

Квантовые вычисления для разработчиков. Показываем, как квантовые вычисления помогут в программировании. Рассматриваем основные подходы и прогнозы на будущее ✔ Tproger

Почему технологии 80-х тормозят корпоративные коммуникации и что с этим делать

Почему корпоративная почта до сих пор работает на стандартах прошлого века? И можно ли это изменить без отказа от привычного формата? Разбираемся на примере стандартных протоколов и рассказываем, как мы в «МБК Лаб» подошли к решению этой проблемы.

🔥 Энтузиаст создал игру на чистом ассемблере без использования библиотек

Пользователь Reddit под ником LlaroLlethri создал игру на ассемблере для архитектуры x86_64 под Linux, не используя стандартные библиотеки, включая C

Реклама

Школа Айти Авторов

В закрытом канале мы учим авторов писать лучше и зарабатывать больше на статьях про технологии

Подписаться на канал

Лучшие статьи недели

Не пропустите самые интересные и популярные статьи!

Подписаться
Нажимая «Подписаться», вы принимаете условия передачи данных и политику конфиденциальности .

Обсуждают сейчас

Анастасия Колесникова

01 авг 202501 авг 2025 в 22:35

&gt;&gt; Используем MSI файл и следуем инструкциям.

Какой файл? где откуда...

&gt;&gt; Проверяем корректность установки, создав и выполнив файл C:\Projects\Go\test.go:

Где создавать, что выполнять, как выполнять..

У меня в папке Go файл в целом невозможно создавать, только на рабочем столе блонкнот там и перемещать .go формата уже.. Но это же кринж какой-то
Golang: основы для начинающих

Дмитрий Козлов

01 авг 202501 авг 2025 в 21:38

Тема создана для опроса?
Основатель YC-стартапа рассказал о самом коротком и странном собеседовании в своей жизни

Сергей Уколов

01 авг 202501 авг 2025 в 16:30

Obsidian если в одно лицо. Если с командой: большая - Yandex Wiki, небольшая - AFFiNE (почти полный аналог Notion в глубокой разработке, наткнулся пару месяцев назад)
Где вести базу знаний по проекту: альтернативы Notion для айтишников в 2025

Евгений Стребков

01 авг 202501 авг 2025 в 13:02

На мой взгляд сегодня это лучшая альтернатива
Где вести базу знаний по проекту: альтернативы Notion для айтишников в 2025

Скопировать токен

О рекламодателе

Реклама на tproger.ru

Мы тоже используем куки, потому что без них вообще ничего не работает

Хорошо

Хорошо

Скопировать токен

О рекламодателе

Реклама на tproger.ru